A system including a programmable logic device (PLD) such as an FPGA typically includes a nonvolatile memory for storing configuration data for the PLD. When the system is powered up, the configuration information in the nonvolatile memory is loaded into the PLD to configure it so the system can become operational. PLDs have the advantage that they can be reconfigured while in the system, thus allowing the system to take on a different function without having to change any of the hardware in the system. It is also possible to change the hardware in the system to add new features, increase speed, or otherwise upgrade the system, and this typically requires reconfiguring the PLD to implement the new features or to work with other new hardware. Systems including FPGAs or other PLDs need for the PLD to be configured in order to be fully functional. In certain instances, the PLD will need to be functional for a user to be able to store a new configuration in the nonvolatile memory that configures the PLD.
If the system experiences a power failure or other interruption such as brownout while a new configuration is being stored in the nonvolatile memory, the system can become unusable because there is no functional configuration stored in the nonvolatile memory. When power is restored, there will be no working configuration available to load into the PLD.
When computer firmware and programmable logic device configurations are updated, it is important that any error that occurs during the reconfiguration not leave the system in an unstable state or in a state that can not be recovered from.
To avoid this problem, the user had to use an uninterruptible power supply (UPS) or to ensure through other means that no interruptions occurred while updating.
It would be desirable to be able to assure that a failure while reconfiguring a PLD would not leave the system in an unusable state without requiring the use of an uninterruptible power supply.